package com.zzh.zzhaiagent.utils;

import cn.hutool.crypto.digest.DigestUtil;
import cn.hutool.core.util.RandomUtil;

/**
 * 密码加密工具类
 * 使用SHA-256算法结合随机盐值进行密码加密
 */
public class PasswordUtil {

    /**
     * 生成随机盐值
     * @return 长度为32的随机字符串
     */
    public static String generateSalt() {
        return RandomUtil.randomString(32);
    }

    /**
     * 加密密码
     * @param password 原始密码
     * @param salt 盐值
     * @return 加密后的密码（64位十六进制字符串）
     */
    public static String encrypt(String password, String salt) {
        // 密码 + 盐值组合
        String combined = password + salt;
        // 使用SHA-256加密
        String encrypted = DigestUtil.sha256Hex(combined);
        return encrypted;
    }

    /**
     * 验证密码
     * @param rawPassword 原始密码
     * @param salt 盐值
     * @param encryptedPassword 加密后的密码
     * @return 密码是否匹配
     */
    public static boolean verify(String rawPassword, String salt, String encryptedPassword) {
        String newEncrypted = encrypt(rawPassword, salt);
        return newEncrypted.equals(encryptedPassword);
    }

    public static void main(String[] args) {
        // 示例：加密密码
        String password = "123456";
        String salt = generateSalt();
        String encrypted = encrypt(password, salt);
        
        System.out.println("原始密码: " + password);
        System.out.println("盐值: " + salt);
        System.out.println("加密后: " + encrypted);
        System.out.println("加密后长度: " + encrypted.length()); // 应为64，适合varchar(64)
        
        // 验证密码
        boolean isValid = verify(password, salt, encrypted);
        System.out.println("密码验证结果: " + isValid);
    }
}